% \documentclass[dvipsnames]{article}
\documentclass[dvipsnames]{ctexart}

\usepackage{emoji}
\usepackage{geometry}\geometry{
  a4paper,
  total={170mm,257mm},
  left=20mm,
  top=20mm,
}

\usepackage{tcolorbox}
\tcbuselibrary{skins}
\tcbuselibrary{minted}
\tcbuselibrary{breakable}
\newcommand{\makeSimpleListing}[2]{
  \newtcblisting{#1}{
    listing engine=minted,
    minted language=#2,
    minted style=vs,
    minted options={fontsize=\small,autogobble,
      breaklines=true
      % framesep=1cm
    },
    tile,
    listing only,
    % bottom=0cm,
    % nobeforeafter,
    boxsep=0mm,
    left=1mm,
    opacityback=0.5,
    colback=gray!20,
    breakable
  }
}

% pygmentize -L lexers
\makeSimpleListing{simplec}{c++}
\makeSimpleListing{simplepy}{python}
\makeSimpleListing{simpleyml}{yaml}
\makeSimpleListing{simplesh}{bash}
\makeSimpleListing{simplecf}{cfg}
\makeSimpleListing{simplexml}{xml}
\makeSimpleListing{simplejv}{java}
\makeSimpleListing{simplejson}{json}

% Color
\newcommand{\mycola}{MidnightBlue}
\newcommand{\mycolb}{Mahogany}
\newcommand{\mycolc}{OliveGreen}

\newcommand{\cola}[1]{\textcolor{\mycola}{#1}}
\newcommand{\colb}[1]{\textcolor{\mycolb}{#1}}
\newcommand{\colc}[1]{\textcolor{\mycolc}{#1}}
\newcommand{\Cola}[1]{\textcolor{\mycola}{\textbf{#1}}}


\usepackage{fontspec}

\setmonofont{Cascadia}[
Path=/usr/share/fonts/truetype/Cascadia_Code/,
Scale=0.85,
Extension = .ttf,
UprightFont=*Code,              %find CascadiaCode.ttf
BoldFont=*CodePL,               %find CascadiaCodePL.ttf ...
ItalicFont=*CodeItalic,
BoldItalicFont=*CodePLItalic
]

\title{可信服务器后端 部署文档}
\date{\today}
\author{北京数涧信息技术有限公司}

% --------------------------------------------------
\begin{document}
\maketitle{}

\section{简介}
这套系统包含两个程序，所以要准备两个环境：

\begin{enumerate}
\item 可信根 Monitor node: 这个是那个PCIE板卡，应该是跑的Ubuntu. 这上面要跑一个
  java，它会管理一些主机信息。我们叫它\texttt{java-server}.
\item 被管理主机 Controlled node: 这个是被管理的主机，应该跑的是类Redhat的系统.
  这上面要跑一个go程序，它会定期向\texttt{java-server}报告一些信息。我们叫
  它\texttt{go-agent}.
\end{enumerate}

\subsection{项目树}
\emoji{parrot}: 你第一眼看下来，应该会觉得这个项目是一个java的maven项目. 它确实是，但是它还包含了
一个文件夹\texttt{go-agent}, 这是一个go的项目。如名字所说，这个文件夹下面
是\texttt{go-agent}

\subsection{通信}

两个节点期待是通过IP网络进行沟通.（当然这个IP网络可能是由板卡链接虚出来...）两个
节点应该可以相互通过以下地址访问：

\begin{enumerate}
\item Monitor node: \texttt{fd00::1:1/126}
\item Controlled node: \texttt{fd00::1:2/126}
\end{enumerate}

\emoji{parrot}: 这个配置比较特殊，因为有\texttt{go-agent}会改系统的防火墙
\texttt{iptables},然后为了防止\texttt{go-agent}改完以后自己连不上
\texttt{java-server}了，我们用了一些防火墙魔法来跳过以上的地址。
\section{\texttt{go-agent} 环境准备 + 部署}

\texttt{go-agent} 会调两个命令行程序：
\begin{enumerate}
\item \texttt{sha256sum} 用来计算文件的哈希值
\item \texttt{create\_ecryptfs} 用来加密文件
\end{enumerate}

所以一般可以这样：
\begin{simplesh}
sudo yum update
sudo yum install ecryptfs-utils
sudo modprobe ecryptfs

# configure the network
dev=dev_to_monitor_node
sudo ip -6 addr add fd00::1:2/126 dev $dev

cd go-agent
go run .                        # start the go-agent
\end{simplesh}

\section{\texttt{java-server} 环境准备 + 部署}
\texttt{java-server} 需要以下外部依赖
\begin{enumerate}
\item \texttt{lualatex}
\item 装在\texttt{/usr/share/fonts/truetype/Cascadia\_Code/}下的Cascade Code字体
  (可以从github下载)
\item mariadb (我们在\texttt{mock-folder}里放了一个\texttt{compose.yml}，可以直
  接用\texttt{docker compose up}启动)
\item \emoji{parrot} : 最最重要的，\texttt{go-agent}要先起来。
\end{enumerate}

\begin{simplesh}
sudo apt install texlive

# get cascadia code
sudo mkdir  /usr/share/fonts/truetype/Cascadia_Code
sudo wget https://github.com/microsoft/cascadia-code/archive/refs/tags/v2111.01.tar.gz
sudo tar -xvf v2111.01.tar.gz
sudo cp cascadia-code-2111.01/ttf/* /usr/share/fonts/truetype/Cascadia_Code

cd /path/to/project/mock-folder
docker compose up
\end{simplesh}
最后，启动\texttt{java-server}:
\begin{simplesh}
./mvnw spring-boot:run
\end{simplesh}

\end{document}

% Local Variables:
% TeX-engine: luatex
% TeX-command-extra-options: "-shell-escape"
% TeX-master: "readme-zh.tex"
% TeX-parse-self: t
% TeX-auto-save: t
% End: